package com.cjie.ecommerce.entity;

import lombok.AllArgsConstructor;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;

/**
 * 商品实体类，表示电商系统中的商品信息
 * 实现了Serializable接口以支持序列化操作
 */
@Data
@AllArgsConstructor
public class Product implements Serializable {
    /**
     * 商品唯一标识符
     */
    private Long id;

    /**
     * 商品名称
     */
    private String name;

    /**
     * 商品所属分类ID
     */
    private String categoryId;

    /**
     * 商品价格，使用BigDecimal保证精确计算
     */
    private BigDecimal price;

    /**
     * 商品描述信息
     */
    private String description;

    /**
     * 商品库存数量
     */
    private Integer stock;

    /**
     * 商品图片URL地址
     */
    private String imageUrl;

    /**
     * 是否热销商品
     */
    private Boolean hot; // 是否热销商品

    /**
     * 重写toString方法，返回商品的详细信息
     * @return 包含商品所有字段的字符串表示
     */
    @Override
    public String toString() {
        // 拼接商品ID字段
        return "Product{" +
                "id=" + id +
                // 拼接商品名称字段
                ", name='" + name + '\'' +
                // 拼接商品分类ID字段
                ", categoryId=" + categoryId +
                // 拼接商品价格字段
                ", price=" + price +
                // 拼接商品库存字段
                ", stock=" + stock +
                // 拼接商品图片URL字段
                ", imageUrl='" + imageUrl + '\'' +
                // 拼接是否热销商品字段
                ", hot=" + hot +
                '}';
    }

    /**
     * 商品构造方法，初始化商品基本信息
     * @param id 商品ID
     * @param name 商品名称
     * @param categoryId 商品分类ID
     * @param price 商品价格
     * @param description 商品描述
     * @param stock 商品库存
     * @param imageUrl 商品图片URL
     */
    public Product(Long id, String name, String categoryId, BigDecimal price, String description, Integer stock, String imageUrl) {
        // 设置商品ID
        this.id = id;
        // 设置商品名称
        this.name = name;
        // 设置商品分类ID
        this.categoryId = categoryId;
        // 设置商品价格
        this.price = price;
        // 设置商品描述
        this.description = description;
        // 设置商品库存
        this.stock = stock;
        // 设置商品图片URL
        this.imageUrl = imageUrl;
        // 默认设置商品为非热销状态
        this.hot = false;
    }
}